From hanoi Require Import extra gdist ghanoi ghanoi3. Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. Section Hanoi3. (*****************************************************************************) (* The pegs are the three elements of 'I_3 *) (*****************************************************************************) Implicit Type p : peg 3. Local Notation "c1 `-->_r c2" := (rmove c1 c2) (format "c1 `-->_r c2", at level 60). Local Notation "c1 `-->*_r c2" := (connect rmove c1 c2) (format "c1 `-->*_r c2", at level 60). (******************************************************************************) (* Function that builds a path from peg to peg *) (******************************************************************************) Fixpoint ppeg {n : nat} p1 p2 := if n isn't n1.+1 return seq (configuration 3 n) then [::] else let p3 := `p[p1, p2] in [seq ↑[i]_p1 | i <- ppeg p1 p3] ++ [seq ↑[i]_p2 | i <- `c[p3] :: ppeg p3 p2].n:natp1, p2:peg 3size (ppeg p1 p2 : seq (configuration 3 n)) = (2 ^ n).-1n:natp1, p2:peg 3size (ppeg p1 p2 : seq (configuration 3 n)) = (2 ^ n).-1n:natIH:forall p1 p2, size (ppeg p1 p2) = (2 ^ n).-1p1, p2:peg 3size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1by rewrite -(prednK (_ : 0 < 2 ^ n)) // expn_gt0. Qed.n:natIH:forall p1 p2, size (ppeg p1 p2) = (2 ^ n).-1p1, p2:peg 3(2 ^ n).-1 + (2 ^ n).-1.+1 = (2 ^ n + 2 ^ n).-1n:natp1, p2:peg 3c:configuration 3 ncs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)last c cs = `c[p2]n:natp1, p2:peg 3c:configuration 3 ncs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)last c cs = `c[p2]n:natp1, p2:peg 3c:configuration 3 ncs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)HH:irreflexive (rrel (n:=3))last c cs = `c[p2]HH:irreflexive (rrel (n:=3))p2:peg 3c:configuration 3 0c = `c[p2]HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2 (c : configuration 3 n), last c (ppeg p1 p2) = `c[p2]p1, p2:peg 3c:configuration 3 n.+1last c ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = `c[p2]by rewrite last_cat /= last_map IH perfect_liftr. Qed.HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2 (c : configuration 3 n), last c (ppeg p1 p2) = `c[p2]p1, p2:peg 3c:configuration 3 n.+1last c ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = `c[p2]n:natp1, p2:peg 3cs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)p1 != p2 -> path rmove `c[p1] csn:natp1, p2:peg 3cs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)p1 != p2 -> path rmove `c[p1] csn:natp1, p2:peg 3cs:=ppeg p1 p2 : seq (configuration 3 n):seq (configuration 3 n)HH:irreflexive (rrel (n:=3))p1 != p2 -> path rmove `c[p1] csHH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2path rmove `c[p1] ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3path rmove `c[p1] ([seq ↑[i]_p1 | i <- ppeg p1 p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3p1Dp3:p1 != p3path rmove `c[p1] ([seq ↑[i]_p1 | i <- ppeg p1 p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3p1Dp3:p1 != p3p3Dp2:p3 != p2path rmove `c[p1] ([seq ↑[i]_p1 | i <- ppeg p1 p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3p1Dp3:p1 != p3p3Dp2:p3 != p2[&& path (move (rrel (n:=3))) `c[p1] (ppeg p1 p3), last `c[p1] [seq ↑[i]_p1 | i <- ppeg p1 p3] `-->_r ↑[`c[p3]]_p2 & path (move (rrel (n:=3))) `c[p3] (ppeg p3 p2)]HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3p1Dp3:p1 != p3p3Dp2:p3 != p2last `c[p1] [seq ↑[i]_p1 | i <- ppeg p1 p3] `-->_r ↑[`c[p3]]_p2by apply: move_liftr_perfect; rewrite // eq_sym opegDr. Qed. (* We can go from any perfect configuration to a perfect configuration *)HH:irreflexive (rrel (n:=3))n:natIH:forall p1 p2, p1 != p2 -> path rmove `c[p1] (ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2p3:=`p[p1, p2]:peg 3p1Dp3:p1 != p3p3Dp2:p3 != p2↑[`c[p3]]_p1 `-->_r ↑[`c[p3]]_p2n:natp1, p2:peg 3`c[p1 , n] `-->*_r `c[p2]n:natp1, p2:peg 3`c[p1 , n] `-->*_r `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2`c[p1] `-->*_r `c[p2]by rewrite last_ppeg. Qed. (* The proof is done by inspecting the moves that the last disk is doing in cs*) (* We use a double induction : *) (* The first induction is used when the path has duplicates *) (* The second induction is on n and to bound recursive call *)n:natp1, p2:peg 3p1Dp2:p1 != p2`c[p2] = last `c[p1] (ppeg p1 p2)n:natp1, p2:peg 3cs:seq (configuration 3 n)p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natp1, p2:peg 3cs:seq (configuration 3 n)p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)(* The first induction is used when the path has duplicates (1 case) *)n:natp1, p2:peg 3cs:seq (configuration 3 n)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natp1, p2:peg 3cs:seq (configuration 3 n)sLm:size cs < m.+1p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])(* Is there a move of the last first disk *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])(* No move : impossible since p1 != p2 *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2let c' := ↓[`c[p1]] in let cs' := [seq ↓[i] | i <- cs] in let p := `c[p1] ldisk in cs = [seq ↑[i]_p | i <- cs'] -> path (move (rrel (n:=3))) c' cs' -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2`c[p1] ldisk == `c[p2] ldisk -> (2 ^ n.+1).-1 <= 0 ?= iff ([::] == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1a :: cs = ↑[↓[a]]_(`c[p1] ldisk) :: [seq ↑[i]_(`c[p1] ldisk) | i <- [seq ↓[i] | i <- cs]] -> move (rrel (n:=3)) ↓[`c[p1]] ↓[a] && path (move (rrel (n:=3))) ↓[a] [seq ↓[i] | i <- cs] -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last a cs = `c[p2] -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (a :: cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1a :: cs = ↑[↓[a]]_(`c[p1] ldisk) :: [seq ↑[i]_(`c[p1] ldisk) | i <- [seq ↓[i] | i <- cs]] -> move (rrel (n:=3)) ↓[`c[p1]] ↓[a] && path (move (rrel (n:=3))) ↓[a] [seq ↓[i] | i <- cs] -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last a cs = `c[p2] -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (a :: cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2](2 ^ n.+1).-1 <= (size cs).+1 ?= iff (a :: cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2]last a cs \in a :: cs -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (a :: cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2]`c[p2] ldisk == ↑[↓[a]]_p1 ldisk -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]] == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2]`c[p2] \in [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]] -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (↑[↓[a]]_p1 :: [ seq ↑[i]_p1 | i <- [ seq ↓[i] | i <- cs]] == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2]`c[p2] \in [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]] -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]] == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3p1Dp2:p1 != p2a:configuration 3 n.+1cs:seq (configuration 3 n.+1)sLm:(size cs).+1 < m.+1acsE:a :: cs = ↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]]lacsE:last a cs = `c[p2]c:finfun_eqType (ordinal_finType n) (ordinal_eqType 3)`c[p2] ldisk == ↑[c]_p1 ldisk -> (2 ^ n.+1).-1 <= (size cs).+1 ?= iff (↑[↓[a]]_p1 :: [seq ↑[i]_p1 | i <- [seq ↓[i] | i <- cs]] == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])(* There is a move from p1 to p3 *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2forall (cs1 : seq (configuration 3 n)) (cs2 : seq (configuration 3 n.+1)), let p3 := `c[p1] ldisk in forall p4, let p5 := `p[p3, p4] in let c1 := ↓[`c[p1]] in let c2 := ↑[`c[p5]]_p4 in p3 != p4 -> rrel p3 p4 -> last c1 cs1 = `c[p5] -> cs = [seq ↑[i1]_p3 | i1 <- cs1] ++ c2 :: cs2 -> path (move (rrel (n:=3))) c1 cs1 -> path (move (rrel (n:=3))) c2 cs2 -> size ([seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i3]_p1 | i3 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i3]_p2 | i3 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3last `c[p1] cs1 = `c[`p[p1, p3]] -> cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2 -> path (move (rrel (n:=3))) `c[p1] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1size cs1 < m.+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])(* After the first move, last disk is on p3, the other disk is `p[p1, p3] *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])(* Is there another move *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1path (move (rrel (n:=3))) ↑[`c[`p[p1, p3]]]_p3 cs2 -> size ([seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i0]_p1 | i0 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i0]_p2 | i0 <- ppeg `p[p1, p2] p2])(* there is no move so p3 = p2 and simple induction should make it *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2 = [seq ↑[i]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i <- [seq ↓[i] | i <- cs2]] -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] [seq ↓[i] | i <- cs2] -> true -> size ([seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]] -> path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2] -> true -> size ([seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i1]_p1 | i1 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i1]_p2 | i1 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3 = p2irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1↑[last `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]]_p3 = `c[p2] -> p3 = p2irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs2E:cs2 = [seq ↑[i]_p3 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p3]] [seq ↓[i] | i <- cs2]sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]size [seq ↓[i] | i <- cs2] < m.+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]size [seq ↓[i] | i <- cs2] < (size cs).+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1↓[last ↑[`c[`p[p1, p2]]]_p2 cs2] = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p2])cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 = size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 = size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 = size cs2(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 = size cs2(2 ^ n).-1 + (2 ^ n).-1.+1 <= (2 ^ n).-1 + (2 ^ n).-1.+1 ?= iff trueirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 == size ([seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size [seq ↓[i] | i <- cs2](2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 = size cs1HL2:(2 ^ n).-1 < size cs2(2 ^ n.+1).-1 < size cs1 + (size cs2).+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL2:(2 ^ n).-1 <= size [seq ↓[i] | i <- cs2] ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)HL1:(2 ^ n).-1 < size cs1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p3E:p3 = p2p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p2]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p2]]]_p2 :: cs2cs2E:cs2 = [seq ↑[i]_p2 | i <- [seq ↓[i] | i <- cs2]]p1p3Pcs2:path (move (rrel (n:=3))) `c[`p[p1, p2]] [seq ↓[i] | i <- cs2]Scs2:size [seq ↓[i] | i <- cs2] < m.+1p1p2Lcs2:last `c[`p[p1, p2]] [seq ↓[i] | i <- cs2] = `c[p2]HL1:(2 ^ n).-1 < size cs1HL2:(2 ^ n).-1 <= size cs2 ?= iff ([seq ↓[i] | i <- cs2] == ppeg `p[p1, p2] p2)(2 ^ n.+1).-1 < size cs1 + (size cs2).+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [ seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1forall (cs1 : seq (configuration 3 n)) (cs3 : seq (configuration 3 n.+1)) p4, ↑[`c[`p[p1, p3]]]_p3 ldisk != p4 -> rrel (↑[`c[`p[p1, p3]]]_p3 ldisk) p4 -> last ↓[↑[`c[`p[p1, p3]]]_p3] cs1 = `c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]] -> cs2 = [seq ↑[i1]_(↑[`c[`p[p1, p3]]]_p3 ldisk) | i1 <- cs1] ++ ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 :: cs3 -> path (move (rrel (n:=3))) ↓[↑[`c[`p[p1, p3]]]_p3] cs1 -> path (move (rrel (n:=3))) ↑[`c[`p[↑[`c[`p[p1, p3]]]_p3 ldisk, p4]]]_p4 cs3 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3 != p4 -> rrel p3 p4 -> last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]] -> cs2 = [seq ↑[i1]_p3 | i1 <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4 -> path rmove `c[`p[p1, p3]] cs3 -> path rmove ↑[`c[`p[p3, p4]]]_p4 cs4 -> true -> size ([seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1 -> true -> last `c[p1] cs = `c[p2] -> (2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i4]_p1 | i4 <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i4]_p2 | i4 <- ppeg `p[p1, p2] p2])(* we did two moves of the largest disk so we cannot be = *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2](2 ^ n.+1).-1 <= size cs ?= iff (cs == [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2])irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]size cs = size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) -> (2 ^ n.+1).-1 == size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2](2 ^ n.+1).-1 < size cs(* Did we come back to p1 *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2](2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size cs(* if so cs has a repetition so we can use IHm *)irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)size cs' < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cs(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)size cs1 + size cs4 < size cs1 + (size cs3 + (size cs4).+1).+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cs(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cs(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cs(2 ^ n.+1).-1 <= size cs'irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cspath rmove `c[p1] cs'irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast `c[p1] cs' = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cspath rmove ↑[`c[p1]]_p1 [seq ↑[i]_p1 | i <- cs1] && path rmove (last ↑[`c[p1]]_p1 [seq ↑[i]_p1 | i <- cs1]) cs4irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast `c[p1] cs' = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast `c[p1] cs' = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast (last ↑[`c[p1]]_p1 [seq ↑[i]_p1 | i <- cs1]) cs4 = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast ↑[`c[`p[p1, p3]]]_p1 cs4 = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Ep1:p4 = p1p3Dp4:p3 != p1p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p1]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p1]]]_p1 :: cs4p3p4Pcs4:path rmove ↑[`c[`p[p3, p1]]]_p1 cs4cs':=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)Scs':size cs' < size cslast `c[p1] cs = `c[p2] -> last ↑[`c[`p[p1, p3]]]_p1 cs4 = `c[p2]irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n.+1).-1 < size csirrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n).-1 + (2 ^ n).-1 <= size cs1 + size cs3 + size cs4irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1(2 ^ n).-1 <= size cs3irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1size cs3 < m.+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1Scs3:size cs3 < m.+1(2 ^ n).-1 <= size cs3irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1size cs3 < (size cs).+1irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1Scs3:size cs3 < m.+1(2 ^ n).-1 <= size cs3irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1size cs3 <= size cs3 + size cs4 + (size cs1).+2irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1Scs3:size cs3 < m.+1(2 ^ n).-1 <= size cs3irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1Scs3:size cs3 < m.+1(2 ^ n).-1 <= size cs3by rewrite opeg3E // eq_sym opeg3E // eq_sym p1Dp3 p4Dp1 eq_sym opegDl. Qed.irrH:irreflexive (rrel (n:=3))symH:symmetric (rrel (n:=3))m:natIHm:forall (n : nat) p1 p2 (cs : seq (configuration 3 n)), size cs < m -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)n:natIH:forall p1 p2 (cs : seq (configuration 3 n)), size cs < m.+1 -> p1 != p2 -> path rmove `c[p1] cs -> last `c[p1] cs = `c[p2] -> (2 ^ n).-1 <= size cs ?= iff (cs == ppeg p1 p2)p1, p2:peg 3cs:seq (configuration 3 n.+1)sLm:size cs < m.+1p1Dp2:p1 != p2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p3:peg 3p1Dp3:p1 != p3p1cs1Lp1p3:last `c[p1] cs1 = `c[`p[p1, p3]]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ ↑[`c[`p[p1, p3]]]_p3 :: cs2p1Pcs1:path (move (rrel (n:=3))) `c[p1] cs1Scs1:size cs1 < m.+1p1Dp1p3:p1 != `p[p1, p3]HL1:(2 ^ n).-1 <= size cs1 ?= iff (cs1 == ppeg p1 `p[p1, p3])n2E:(2 ^ n.+1).-1 = (2 ^ n).-1 + (2 ^ n).-1.+1cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p3Dp4:p3 != p4p1p3cs3Lp3p4:last `c[`p[p1, p3]] cs3 = `c[`p[p3, p4]]cs2E:cs2 = [seq ↑[i]_p3 | i <- cs3] ++ ↑[`c[`p[p3, p4]]]_p4 :: cs4p1p3Pcs3:path rmove `c[`p[p1, p3]] cs3p3p4Pcs4:path rmove ↑[`c[`p[p3, p4]]]_p4 cs4sH:size ([seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]) = (2 ^ n.+1).-1p1csLp2:last `c[p1] cs = `c[p2]p4Dp1:p4 != p1Scs3:size cs3 < m.+1`p[p1, p3] != `p[p3, p4]n:natp1, p2:peg 3`d[`c[p1 , n], `c[p2]]_rmove = (2 ^ n).-1 * (p1 != p2)n:natp1, p2:peg 3`d[`c[p1 , n], `c[p2]]_rmove = (2 ^ n).-1 * (p1 != p2)n:natp1, p2:peg 3p1Dp2:p1 != p2`d[`c[p1], `c[p2]]_rmove = (2 ^ n).-1 * ~~ falsen:natp1, p2:peg 3p1Dp2:p1 != p2`d[`c[p1], `c[p2]]_rmove = (2 ^ n).-1n:natp1, p2:peg 3p1Dp2:p1 != p2`d[`c[p1], `c[p2]]_rmove <= size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2path rmove `c[p1] (ppeg p1 p2)n:natp1, p2:peg 3p1Dp2:p1 != p2last `c[p1] (ppeg p1 p2) = `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2path rmove `c[p1] (ppeg p1 p2)n:natp1, p2:peg 3p1Dp2:p1 != p2last `c[p1] (ppeg p1 p2) = `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2last `c[p1] (ppeg p1 p2) = `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2last `c[p1] (ppeg p1 p2) = `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2size (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2`c[p1] `-->*_r `c[p2]n:natp1, p2:peg 3p1Dp2:p1 != p2cs:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))csH:gpath rmove `c[p1] `c[p2] cssize (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2cs:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))csH:gpath rmove `c[p1] `c[p2] cssize (ppeg p1 p2) <= `d[`c[p1], `c[p2]]_rmoven:natp1, p2:peg 3p1Dp2:p1 != p2cs:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))csH:gpath rmove `c[p1] `c[p2] cs(2 ^ n).-1 <= size csby apply: gpath_last csH. Qed. (*****************************************************************************) (* Function that builds a path from a configuration to a peg *) (*****************************************************************************) Fixpoint rpeg {n : nat} := if n is n1.+1 return configuration 3 n -> peg 3 -> seq (configuration 3 n) then fun c p => let p1 := c ldisk in if p1 == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else let p2 := `p[p1, p] in [seq ↑[i]_p1 | i <- rpeg ↓[c] p2] ++ [seq ↑[i]_p | i <- `c[p2] :: ppeg p2 p] else fun _ _ => [::].n:natp1, p2:peg 3cs:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))csH:gpath rmove `c[p1] `c[p2] cslast `c[p1] cs = `c[p2]n:natp:peg 3rpeg `c[p] p = [::]n:natp:peg 3rpeg `c[p] p = [::]by rewrite ffunE eqxx perfect_unliftr IH. Qed.p:peg 3n:natIH:rpeg `c[p] p = [::](if `c[p] ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[`c[p]] p] else [seq ↑[i]_(`c[p] ldisk) | i <- rpeg ↓[`c[p]] `p[`c[p] ldisk, p]] ++ ↑[`c[`p[`c[p] ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[`c[p] ldisk, p] p]) = [::]n:natc:configuration 3 np:peg 3rpeg c p = [::] -> c = `c[p]n:natc:configuration 3 np:peg 3rpeg c p = [::] -> c = `c[p]p:peg 3n:natIH:forall c : configuration 3 n, rpeg c p = [::] -> c = `c[p]c:configuration 3 n.+1(if c ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p]) = [::] -> c = `c[p]p:peg 3n:natIH:forall c : configuration 3 n, rpeg c p = [::] -> c = `c[p]c:configuration 3 n.+1H:c ldisk = p[seq ↑[i]_p | i <- rpeg ↓[c] p] = [::] -> c = `c[p]p:peg 3n:natIH:forall c : configuration 3 n, rpeg c p = [::] -> c = `c[p]c:configuration 3 n.+1H:c ldisk = p[seq ↑[i]_p | i <- rpeg ↓[c] p] = [::] -> ↑[↓[c]]_(c ldisk) = `c[p]by rewrite H perfect_liftr. Qed.p:peg 3n:natIH:forall c : configuration 3 n, rpeg c p = [::] -> c = `c[p]c:configuration 3 n.+1H:c ldisk = p↑[`c[p]]_(c ldisk) = `c[p]n:natp1, p2:peg 3p1 != p2 -> rpeg `c[p1 , n] p2 = ppeg p1 p2n:natp1, p2:peg 3p1 != p2 -> rpeg `c[p1 , n] p2 = ppeg p1 p2by rewrite ffunE perfect_unliftr (negPf p1Dp2) !IH // eq_sym opegDl. Qed.n:natIH:forall p1 p2, p1 != p2 -> rpeg `c[p1] p2 = ppeg p1 p2p1, p2:peg 3p1Dp2:p1 != p2(if `c[p1] ldisk == p2 then [seq ↑[i]_p2 | i <- rpeg ↓[`c[p1]] p2] else [seq ↑[i]_(`c[p1] ldisk) | i <- rpeg ↓[`c[p1]] `p[`c[p1] ldisk, p2]] ++ ↑[`c[`p[`c[p1] ldisk, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[`c[p1] ldisk, p2] p2]) = [seq ↑[i]_p1 | i <- ppeg p1 `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- ppeg `p[p1, p2] p2]n:natc:configuration 3 np:peg 3cs:=rpeg c p:seq (configuration 3 n)last c cs = `c[p]n:natc:configuration 3 np:peg 3cs:=rpeg c p:seq (configuration 3 n)last c cs = `c[p]c:configuration 3 0p:peg 3c = `c[p]n:natIH:forall (c : configuration 3 n) p, last c (rpeg c p) = `c[p]c:configuration 3 n.+1p:peg 3last c (if c ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p]) = `c[p]n:natIH:forall (c : configuration 3 n) p, last c (rpeg c p) = `c[p]c:configuration 3 n.+1p:peg 3last c (if c ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p]) = `c[p]n:natIH:forall (c : configuration 3 n) p, last c (rpeg c p) = `c[p]c:configuration 3 n.+1p:peg 3Ho:c ldisk = plast c [seq ↑[i]_p | i <- rpeg ↓[c] p] = `c[p]n:natIH:forall (c : configuration 3 n) p, last c (rpeg c p) = `c[p]c:configuration 3 n.+1p:peg 3Do:c ldisk != plast c ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p]) = `c[p]by rewrite last_cat /= last_map last_ppeg perfect_liftr. Qed.n:natIH:forall (c : configuration 3 n) p, last c (rpeg c p) = `c[p]c:configuration 3 n.+1p:peg 3Do:c ldisk != plast c ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p]) = `c[p]n:natc:configuration 3 np:peg 3cs:=rpeg c p:seq (configuration 3 n)path rmove c csn:natc:configuration 3 np:peg 3cs:=rpeg c p:seq (configuration 3 n)path rmove c csn:natc:configuration 3 np:peg 3cs:=rpeg c p:seq (configuration 3 n)HH:irreflexive (rrel (n:=3))path rmove c csHH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3path rmove c (if c ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Ho:c ldisk = ppath rmove c [seq ↑[i]_p | i <- rpeg ↓[c] p]HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != ppath rmove c ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != ppath rmove c ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != pc2:=`c[`p[c ldisk, p]]:configuration 3 npath rmove c ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[c2]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != pc2:=`c[`p[c ldisk, p]]:configuration 3 n[&& true, last c [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] `-->_r ↑[c2]_p & true]HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != pc2:=`c[`p[c ldisk, p]]:configuration 3 nlast c [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] `-->_r ↑[c2]_pHH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != pc2:=`c[`p[c ldisk, p]]:configuration 3 n↑[c2]_(c ldisk) `-->_r ↑[c2]_pby rewrite eq_sym (opegDr _). Qed. (* We can go from any configuration to a perfect configuration *)HH:irreflexive (rrel (n:=3))n:natIH:forall (c : configuration 3 n) p, path rmove c (rpeg c p)c:configuration 3 n.+1p:peg 3Do:c ldisk != pc2:=`c[`p[c ldisk, p]]:configuration 3 np != `p[c ldisk, p]n:natc:configuration 3 np:peg 3c `-->*_r `c[p]n:natc:configuration 3 np:peg 3c `-->*_r `c[p]by rewrite last_rpeg. Qed. (* So we can also from a perfect configuration c to any configuration *)n:natc:configuration 3 np:peg 3`c[p] = last c (rpeg c p)n:natc:configuration 3 np:peg 3`c[p] `-->*_r cn:natc:configuration 3 np:peg 3`c[p] `-->*_r cn:natc:configuration 3 np:peg 3connect (move (rrel (n:=3))) c `c[p]n:natc:configuration 3 np:peg 3symmetric (rrel (n:=3))by exact: rsym. Qed. (* Two configurations are always connected *)n:natc:configuration 3 np:peg 3symmetric (rrel (n:=3))n:natc1, c2:configuration 3 nc1 `-->*_r c2by apply: connect_trans (move_connect_rpeg c1 (inord 1)) (move_connect_lpeg c2 (inord 1)). Qed. (******************************************************************************) (* Function that builds a path from a configuration to a peg *) (******************************************************************************) (*****************************************************************************) (* Computes the size of rpeg *) (*****************************************************************************) Fixpoint size_rpeg {n : nat} : (configuration _ n) -> _ -> nat := match n with | 0 => fun _ _ => 0 | n1.+1 => fun c p => let p1 := c ldisk in if p1 == p then size_rpeg ↓[c] p else let p2 := `p[p1, p] in size_rpeg ↓[c] p2 + 2 ^ n1 end.n:natc1, c2:configuration 3 nc1 `-->*_r c2n:natp:peg 3c:configuration 3 nsize_rpeg c p = size (rpeg c p)n:natp:peg 3c:configuration 3 nsize_rpeg c p = size (rpeg c p)n:natIH:forall p (c : configuration 3 n), size_rpeg c p = size (rpeg c p)p:peg 3c:configuration 3 n.+1(if c ldisk == p then size_rpeg ↓[c] p else size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n) = size (if c ldisk == p then [seq ↑[i]_p | i <- rpeg ↓[c] p] else [seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])by rewrite size_cat /= !size_map size_ppeg prednK ?expn_gt0 // IH. Qed. (* Upper bound on the size *)n:natIH:forall p (c : configuration 3 n), size_rpeg c p = size (rpeg c p)p:peg 3c:configuration 3 n.+1clDp:c ldisk != psize_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n = size ([seq ↑[i]_(c ldisk) | i <- rpeg ↓[c] `p[c ldisk, p]] ++ ↑[`c[`p[c ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c ldisk, p] p])n:natc:configuration 3 np:peg 3size_rpeg c p <= (2 ^ n).-1n:natc:configuration 3 np:peg 3size_rpeg c p <= (2 ^ n).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3(if c ldisk == p then size_rpeg ↓[c] p else size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n) <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] p <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3(2 ^ n).-1 <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3n1:nat(2 ^ n.+1 == 0) = false -> n1 < 2 ^ n.+1 -> n1 <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3size_rpeg ↓[c] `p[c ldisk, p] + 2 ^ n <= (2 ^ n).-1 + 2 ^ nn:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3(2 ^ n).-1 + 2 ^ n <= (2 ^ n.+1).-1n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3(2 ^ n).-1 + 2 ^ n <= (2 ^ n.+1).-1by case: (2 ^ n) (expn_eq0 2 n) => [|n1]; rewrite ?addn0. Qed. (* rpeg gives the smallest path to a perfect configuration. *) (* This path is unique *)n:natIH:forall (c : configuration 3 n) p, size_rpeg c p <= (2 ^ n).-1c:configuration 3 n.+1p:peg 3(2 ^ n).-1 + 2 ^ n <= (2 ^ n + 2 ^ n).-1n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)(* As we want this statememnt to hold for any configuration c1 *) (* and not just for initial perfect configuration the proof is more *) (* intricate. We need a double induction : *) (* The first induction is used when the path has duplicates (1 case) *)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)(* The usual induction on the number of disks *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)sLm:size cs < m.+1path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p](if c1 ldisk == p then size_rpeg ↓[c1] p else size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n) <= size cs ?= iff (cs == (if c1 ldisk == p then [ seq ↑[i]_p | i <- rpeg ↓[c1] p] else [ seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p]))(* the largest disk is already well-placed *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = psize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plast c1 cs ldisk = c1 ldiskm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldisksize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldisksize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs](if cs == [seq ↑[i]_(c1 ldisk) | i <- cs1] then size cs1 == size cs else size cs1 < size cs) -> size_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]last ↓[c1] cs1 = `c[p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p](if cs == [seq ↑[i]_(c1 ldisk) | i <- cs1] then size cs1 == size cs else size cs1 < size cs) -> size_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p](if cs == [seq ↑[i]_(c1 ldisk) | i <- cs1] then size cs1 == size cs else size cs1 < size cs) -> size_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csEcs1:cs = [seq ↑[i]_(c1 ldisk) | i <- cs1]size_rpeg ↓[c1] p <= size cs1 ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csEcs1:cs = [seq ↑[i]_(c1 ldisk) | i <- cs1]size_rpeg ↓[c1] p <= size cs1 ?= iff (cs1 == rpeg ↓[c1] p)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natc1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csEcs1:cs = [seq ↑[i]_(c1 ldisk) | i <- cs1]size cs1 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p <= size cs ?= iff (cs == [seq ↑[i]_p | i <- rpeg ↓[c1] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p == size [seq ↑[i]_p | i <- rpeg ↓[c1] p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p < size csm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p < size csm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize_rpeg ↓[c1] p <= size cs1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natc1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nEp:c1 ldisk = plcsnEc1n:last c1 cs ldisk = c1 ldiskcs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lcsElcs1:last ↓[c1] cs1 = ↓[last c1 cs]lcs1P:last ↓[c1] cs1 = `c[p]csDcs1:cs != [seq ↑[i]_(c1 ldisk) | i <- cs1]scs1L:size cs1 < size cssize cs1 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != psize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldisksize_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])(* We need to move the largest disk *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])(* this case is impossible the largest disk has to move *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)p1:=c1 ldisk:peg 3csE:cs = [seq ↑[i]_p1 | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]f:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)p1:=c1 ldisk:peg 3csE:cs = [seq ↑[i]_p1 | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'c1 ldisk = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1f:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)p1:=c1 ldisk:peg 3csE:cs = [seq ↑[i]_p1 | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'f ↑[last ↓[c1] cs']_(c1 ldisk) = f `c[p] -> ↑[↓[c1]]_(c1 ldisk) ldisk = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, p]] ++ ↑[`c[`p[c1 ldisk, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[c1 ldisk, p] p])(* c2 is the first configuration when the largest disk has moved *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n <= size cs ?= iff (cs == [seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != psize cs1 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != psize cs1 < size csm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1size cs2 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1size cs2 < size csm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nsize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* the first moves of largest disk of cs is the right one *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])size cs2' < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)last c2' cs2' = `c[p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p <= size cs2' ?= iff (cs2' == rpeg c2' p)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)↓[last c2 cs2] = ↓[`c[p]]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p <= size cs2' ?= iff (cs2' == rpeg c2' p)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p <= size cs2' ?= iff (cs2' == rpeg c2' p)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]cs2'L:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c2 ldisk) | i <- cs2'])Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)(if cs2 == [seq ↑[i]_(c2 ldisk) | i <- cs2'] then size cs2' == size cs2 else size cs2' < size cs2) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* there is only one move of the largest disk in cs *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* the first part of cs is perfect *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* the second part of cs is perfect, only case of equality *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2]) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']size ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2]) = size ([seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]) -> size_rpeg ↓[c1] p3 + 2 ^ n == size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2'][seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2] = [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2'](size (rpeg c1' p3) + size (rpeg `c[`p[p1, p2]] p2)).+1 = (size (rpeg c1' p3) + size (ppeg p3 p2)).+1 -> size (rpeg ↓[c1] p3) + 2 ^ n == (size (rpeg c1' p3) + size (rpeg `c[`p[p1, p2]] p2)).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2'][seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2] = [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2'][seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2] = [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2'][seq ↑[i]_(c2 ldisk) | i <- rpeg c2' p2] = [seq ↑[i]_p2 | i <- ppeg p3 p2]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n <= size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size ([seq ↑[i]_p1 | i <- rpeg c1' p3] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) = size ([seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]) -> size_rpeg ↓[c1] p3 + 2 ^ n == size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n < size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size (rpeg c1' p3) + (size cs2').+1 = size (rpeg c1' p3) + (size (ppeg p3 p2)).+1 -> size (rpeg ↓[c1] p3) + 2 ^ n == size (rpeg c1' p3) + (size cs2').+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n < size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'size_rpeg ↓[c1] p3 + 2 ^ n < size (rpeg c1' p3) + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:size_rpeg c2' p2 < size cs2'2 ^ n <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc2:(2 ^ n).-1 < size cs2'2 ^ n <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n <= size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'] == [seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2']) = size ([seq ↑[i]_p1 | i <- rpeg ↓[c1] p3] ++ ↑[`c[p3]]_p2 :: [seq ↑[i]_p2 | i <- ppeg p3 p2]) -> size_rpeg ↓[c1] p3 + 2 ^ n == size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n < size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size (rpeg ↓[c1] p3) + 2 ^ n == size (rpeg ↓[c1] p3) + (size (ppeg p3 p2)).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n < size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1size_rpeg ↓[c1] p3 + 2 ^ n < size cs1 + size (c2 :: [seq ↑[i]_(c2 ldisk) | i <- cs2'])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1(2 ^ n).-1 <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2E:cs2 = [seq ↑[i]_(c2 ldisk) | i <- cs2']Lc1:size_rpeg c1' p3 < size cs1(2 ^ n).-1 <= size cs2' ?= iff (cs2' == ppeg `p[p1, p2] p2) -> (2 ^ n).-1 <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2) = size ([seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p]) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n == size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size cs1 + (size cs2).+1 = size (rpeg ↓[c1] `p[p1, p]) + (size (ppeg `p[p1, p] p)).+1 -> size (rpeg ↓[c1] `p[p1, p]) + 2 ^ n == size cs1 + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2size_rpeg ↓[c1] `p[p1, p2] <= size [seq ↑[i]_p1 | i <- cs1]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs22 ^ n <= size cs2m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs22 ^ n <= size cs2m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']Lcs2:size cs2' < size cs2(2 ^ n).-1 < size cs2m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2'](2 ^ n).-1 <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Ep:p2 = pc2':=↓[c2]:configuration 3 nc2'Epp3:c2' = `c[`p[p1, p2]]cs2':seq (configuration 3 n)c2'Pcs2':path (move (rrel (n:=3))) ↓[c2] cs2'lc2'cs2'E:last ↓[c2] cs2' = ↓[last c2 cs2]Scs2':size cs2' < m.+1IHc1:size_rpeg c1' p3 <= size cs1 ?= iff (cs1 == rpeg c1' p3)IHc2:size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2)cs2D:cs2 != [seq ↑[i]_(c2 ldisk) | i <- cs2']size_rpeg c2' p2 <= size cs2' ?= iff (cs2' == rpeg c2' p2) -> (2 ^ n).-1 <= size cs2'm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* The largest disk jumped to an intermediate peg *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3 = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])(* cs cannot be optimal *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2) ?= iff ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2 == [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p])m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2) = size ([seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p]] ++ ↑[`c[`p[p1, p]]]_p :: [seq ↑[i]_p | i <- ppeg `p[p1, p] p]) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n == size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize cs1 + (size cs2).+1 = size (rpeg ↓[c1] `p[p1, p]) + (size (ppeg `p[p1, p] p)).+1 -> size (rpeg ↓[c1] `p[p1, p]) + 2 ^ n == size cs1 + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c2Pcs2:path (move (rrel (n:=3))) c2 cs2p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)(* this is impossible we need another move of the largest disk *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pc2':=↓[c2]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)let p0 := c2 ldisk in cs2 = [seq ↑[i]_p0 | i <- cs2'] -> path (move (rrel (n:=3))) c2' cs2' -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i0]_p1 | i0 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pc2':=↓[c2]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)cs2E:cs2 = [seq ↑[i]_p2 | i <- cs2']c2'Pcs2':path (move (rrel (n:=3))) c2' cs2'true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p3Ep:p3 = pc2':=↓[c2]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)cs2E:cs2 = [seq ↑[i]_p2 | i <- cs2']c2'Pcs2':path (move (rrel (n:=3))) c2' cs2'p2 = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p3Ep:p3 = pc2':=↓[c2]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)cs2E:cs2 = [seq ↑[i]_p2 | i <- cs2']c2'Pcs2':path (move (rrel (n:=3))) c2' cs2'last c1 cs = `c[p] -> p2 = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p3Ep:p3 = pc2':=↓[c2]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)cs2E:cs2 = [seq ↑[i]_p2 | i <- cs2']c2'Pcs2':path (move (rrel (n:=3))) c2' cs2'f (last c2 cs2) = f `c[p] -> p2 = pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)let p2 := c2 ldisk in forall p3, let p4 := `p[p2, p3] in let c3 := ↓[c2] in let c4 := ↑[`c[p4]]_p3 in p2 != p3 -> rrel p2 p3 -> last c3 cs3 = `c[p4] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p2':=p2:peg 3forall p2, let p3 := `p[p2', p2] in let c3 := ↓[c2] in let c4 := ↑[`c[p3]]_p2 in p2' != p2 -> rrel p2' p2 -> last c3 cs3 = `c[p3] -> cs2 = [seq ↑[i1]_p2' | i1 <- cs3] ++ c4 :: cs4 -> path (move (rrel (n:=3))) c3 cs3 -> path (move (rrel (n:=3))) c4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p2 != p4 -> rrel p2 p4 -> last ↓[c2] cs3 = `c[`p[p2, p4]] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ ↑[`c[`p[p2, p4]]]_p4 :: cs4 -> path (move (rrel (n:=3))) ↓[c2] cs3 -> path (move (rrel (n:=3))) ↑[`c[`p[p2, p4]]]_p4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2 != p4 -> rrel p2 p4 -> last c2' cs3 = `c[p5] -> cs2 = [seq ↑[i1]_p2 | i1 <- cs3] ++ ↑[`c[p5]]_p4 :: cs4 -> path (move (rrel (n:=3))) c2' cs3 -> path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4 -> true -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i3]_p1 | i3 <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)(* the path has a duplicate use the induction hypothesis *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4 = p1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4(p5 != p1) && (p2 != p5) -> p4 = p1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)size cs5 < size csm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cssize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)size cs1 + size cs4 < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cssize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cssize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cspath rmove c1 cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cspath (move (rrel (n:=3))) ↓[c1] cs1 && path rmove (last ↑[↓[c1]]_(c1 ldisk) [seq ↑[i]_p1 | i <- cs1]) cs4m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size cstrue && path rmove (last ↑[↓[c1]]_(c1 ldisk) [seq ↑[i]_p1 | i <- cs1]) cs4m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5last c1 cs5 = `c[p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5last ↑[`c[p3]]_(c1 ldisk) cs4 = `c[p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5last ↑[`c[p3]]_p1 cs4 = last ↑[`c[p5]]_p4 cs4m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size cs5 < size [seq ↑[i]_p1 | i <- cs1] + (size cs2).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < (size cs5).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < (size cs5).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p]size cs5 < mm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p](forall (c : configuration 3 n.+1) p, path rmove c cs5 -> last c cs5 = `c[p] -> size_rpeg c p <= size cs5 ?= iff (cs5 == rpeg c p)) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p](size cs5).+1 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p](forall (c : configuration 3 n.+1) p, path rmove c cs5 -> last c cs5 = `c[p] -> size_rpeg c p <= size cs5 ?= iff (cs5 == rpeg c p)) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p](forall (c : configuration 3 n.+1) p, path rmove c cs5 -> last c cs5 = `c[p] -> size_rpeg c p <= size cs5 ?= iff (cs5 == rpeg c p)) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Ep3:p5 = p3p4Ep1:p4 = p1cs5:=[seq ↑[i]_p1 | i <- cs1] ++ cs4:seq (configuration 3 n.+1)scs5Lscs:size cs5 < size csc1Mcs5:path rmove c1 cs5lc1cs5E:last c1 cs5 = `c[p](if c1 ldisk == p then size_rpeg ↓[c1] p else size_rpeg ↓[c1] `p[c1 ldisk, p] + 2 ^ n) <= size cs5 ?= iff (cs5 == (if c1 ldisk == p then [ seq ↑[i]_p | i <- rpeg ↓[c1] p] else [ seq ↑[i]_ (c1 ldisk) | i <- rpeg ↓[c1] `p[ c1 ldisk, p]] ++ ↑[`c[`p[ c1 ldisk, p]]]_p :: [ seq ↑[i]_p | i <- ppeg `p[ c1 ldisk, p] p])) -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n <= size cs5m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)(* now we just need to use the induction principle on the two subpath *)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)pp5p4Pcs4':path (move (rrel (n:=3))) ↓[↑[`c[p5]]_p4] cs4'lpp5p4cs4'Elpp5p4cs4:last ↓[↑[`c[p5]]_p4] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'size cs3 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'size cs3 < size cs2m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1size cs4 < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1size cs4 < size cs2m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1size cs4' < m.+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size [seq ↑[i]_p1 | i <- cs1] + size (c2 :: cs2)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1IHc1:size_rpeg c2' p5 <= size cs3 ?= iff (cs3 == rpeg c2' p5)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1IHc1:size_rpeg c2' p5 <= size cs3 ?= iff (cs3 == rpeg c2' p5)c2'E:c2' = `c[p3]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:size (ppeg p3 p5) <= size cs3 ?= iff (cs3 == ppeg p3 p5)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p5 != pm:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1lc1csEp:last c1 cs = `c[p]c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != psize_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plast c1 ([seq ↑[i]_p1 | i <- cs1] ++ c2 :: [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4) = `c[p] -> size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]last `c[p5] cs4' = `c[p]m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:size_rpeg `c[p5] p <= size cs4' ?= iff (cs4' == rpeg `c[p5] p)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)size_rpeg ↓[c1] `p[p1, p] + 2 ^ n < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)size_rpeg ↓[c1] `p[p1, p] + (2 ^ n).-1.+1 < size cs1 + (size cs3 + (size cs4).+1).+1m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)size_rpeg ↓[c1] `p[p1, p] + (2 ^ n).-1 <= size cs1 + (size cs3 + size cs4)m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)size_rpeg ↓[c1] `p[p1, p] + (2 ^ n).-1 <= size cs3 + size cs4m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)size_rpeg ↓[c1] `p[p1, p] <= size cs3m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)(2 ^ n).-1 <= size cs4m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)scs4'L:size cs4' <= size cs4 ?= iff (cs4 == [seq ↑[i]_ (↑[`c[p5]]_p4 ldisk) | i <- cs4'])lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)(2 ^ n).-1 <= size cs4by rewrite IHc2. Qed.m:natIHm:forall (n : nat) (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)n:natIH:forall (c : configuration 3 n) p (cs : seq (configuration 3 n)), size cs < m.+1 -> path rmove c cs -> last c cs = `c[p] -> size_rpeg c p <= size cs ?= iff (cs == rpeg c p)c1:configuration 3 n.+1p:peg 3cs:seq (configuration 3 n.+1)Scs:size cs < m.+1c1nDp:c1 ldisk != pf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1:=c1 ldisk:peg 3p2:peg 3p3:=`p[p1, p2]:peg 3c1':=↓[c1]:configuration 3 nc2:=↑[`c[p3]]_p2:configuration 3 n.+1p1Dp2:p1 != p2p1Rp2:rrel p1 p2lc1'cs1Epp3:last c1' cs1 = `c[p3]csE:cs = [seq ↑[i]_p1 | i <- cs1] ++ c2 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1Dp:p1 != pScs1:size cs1 < m.+1Scs2:size cs2 < m.+1p2Dp:p2 != pp3Ep:p3 = pcs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p4:peg 3p5:=`p[p2, p4]:peg 3c2':=↓[c2]:configuration 3 np2Dp4:p2 != p4p2Rp4:rrel p2 p4c2'cs5Epp5:last c2' cs3 = `c[p5]cs2E:cs2 = [seq ↑[i]_p2 | i <- cs3] ++ ↑[`c[p5]]_p4 :: cs4c2'Pcs3:path (move (rrel (n:=3))) c2' cs3pp5p4Pcs4:path (move (rrel (n:=3))) ↑[`c[p5]]_p4 cs4p5Dp3:p5 != p3cs4':seq (configuration 3 n)lpp5p4cs4'Elpp5p4cs4:last `c[p5] cs4' = ↓[last ↑[`c[p5]]_p4 cs4]pp5p4Pcs4':path (move (rrel (n:=3))) `c[p5] cs4'Scs3:size cs3 < m.+1Scs4:size cs4 < m.+1Scs4':size cs4' < m.+1c2'E:c2' = `c[p3]IHc1:(2 ^ n).-1 <= size cs3 ?= iff (cs3 == ppeg p3 p5)p6Dp:p5 != plpp5p4cs4Epp:last ↑[`c[p5]]_p4 cs4 = `c[p]lpp5cs4'Epp:last `c[p5] cs4' = `c[p]IHc2:(2 ^ n).-1 <= size cs4' ?= iff (cs4' == ppeg p5 p)(2 ^ n).-1 <= size cs4'n:natc1:configuration 3 np:peg 3`d[c1, `c[p]]_rmove = size_rpeg c1 pn:natc1:configuration 3 np:peg 3`d[c1, `c[p]]_rmove = size_rpeg c1 pn:natc1:configuration 3 np:peg 3`d[c1, `c[p]]_rmove <= size (rpeg c1 p) <= `d[c1, `c[p]]_rmoven:natc1:configuration 3 np:peg 3path rmove c1 (rpeg c1 p)n:natc1:configuration 3 np:peg 3last c1 (rpeg c1 p) = `c[p]n:natc1:configuration 3 np:peg 3true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3path rmove c1 (rpeg c1 p)n:natc1:configuration 3 np:peg 3last c1 (rpeg c1 p) = `c[p]n:natc1:configuration 3 np:peg 3true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3last c1 (rpeg c1 p) = `c[p]n:natc1:configuration 3 np:peg 3true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3last c1 (rpeg c1 p) = `c[p]n:natc1:configuration 3 np:peg 3true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3c1 `-->*_r `c[p]n:natc1:configuration 3 np:peg 3p1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 `c[p] p1true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3p1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 `c[p] p1true && (size (rpeg c1 p) <= `d[c1, `c[p]]_rmove)n:natc1:configuration 3 np:peg 3p1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 `c[p] p1size_rpeg c1 p <= size p1by apply: gpath_last p1H. Qed.n:natc1:configuration 3 np:peg 3p1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 `c[p] p1last c1 p1 = `c[p]n:natc:configuration 3 np:peg 3`d[c, `c[p]]_rmove <= (2 ^ n).-1by rewrite gdist_size_rpeg; apply: size_rpeg_up. Qed. (******************************************************************************) (* Function that builds a path from a peg to a configuration *) (******************************************************************************) Definition lpeg n p (c : _ _ n) := rev (belast c (rpeg c p)).n:natc:configuration 3 np:peg 3`d[c, `c[p]]_rmove <= (2 ^ n).-1n:natp:peg 3lpeg p `c[p , n] = [::]by rewrite /lpeg rpeg_perfect. Qed.n:natp:peg 3lpeg p `c[p , n] = [::]n:natc:configuration 3 np:peg 3lpeg p c = [::] -> c = `c[p]n:natc:configuration 3 np:peg 3lpeg p c = [::] -> c = `c[p]n:natc:configuration 3 np:peg 3(rpeg c p = [::] -> c = `c[p]) -> lpeg p c = [::] -> c = `c[p]by rewrite rev_cons; case: rev. Qed.n:natc:configuration 3 np:peg 3a:configuration 3 nl:seq (configuration 3 n)(a :: l = [::] -> c = `c[p]) -> rev (c :: belast a l) = [::] -> c = `c[p]n:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)path rmove `c[p] csn:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)path rmove `c[p] csn:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)HHs:symmetric (rrel (n:=3))path rmove `c[p] csby apply: path_rpeg. Qed.n:natc:configuration 3 np:peg 3HHs:symmetric (rrel (n:=3))path (move (rrel (n:=3))) c (rpeg c p)n:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)last `c[p] cs = cn:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)last `c[p] cs = cn:natc:configuration 3 np:peg 3cs:=lpeg p c:seq (configuration 3 n)HHs:symmetric (rrel (n:=3))(let cs := rpeg c p in last c cs = `c[p]) -> last `c[p] cs = cby rewrite rev_cons last_rcons. Qed.n:natc:configuration 3 np:peg 3HHs:symmetric (rrel (n:=3))c1:configuration 3 ncs:seq (configuration 3 n)last c1 cs = `c[p] -> last `c[p] (rev (c :: belast c1 cs)) = cn:natc:configuration 3 np:peg 3size_rpeg c p = size (lpeg p c)by rewrite size_rev size_belast size_rpegE. Qed.n:natc:configuration 3 np:peg 3size_rpeg c p = size (lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)path rmove `c[p] cs -> last `c[p] cs = c -> size_rpeg c p <= size cs ?= iff (cs == lpeg p c)(* why this is so complicated???? *)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)path rmove `c[p] cs -> last `c[p] cs = c -> size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = csize_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))path rmove c (rev (belast `c[p] cs))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))last c (rev (belast `c[p] cs)) = `c[p]n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))c3:configuration 3 ncs1:seq (configuration 3 n)last (last c3 cs1) (rev (`c[p] :: belast c3 cs1)) = `c[p]n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]size_rpeg c p <= size (rev (belast `c[p] cs)) ?= iff (rev (belast `c[p] cs) == rpeg c p) -> size_rpeg c p <= size cs ?= iff (cs == lpeg p c)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]size_rpeg c p <= size cs ?= iff (rev (belast `c[p] cs) == rpeg c p) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c (rpeg c p)))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (u == v) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)(u == v) = (rev (c :: u) == rev (c :: v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (rev (c :: u) == rev (c :: v)) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)(u == v) = (rev u == rev v)n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (rev (c :: u) == rev (c :: v)) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)rev u = rev v -> u = vn:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (rev (c :: u) == rev (c :: v)) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (rev (c :: u) == rev (c :: v)) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (rev (c :: u) == last c v :: rev (belast c v)) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)size_rpeg c p <= size cs ?= iff (cs == rev (belast c v)) && (`c[p] == last c v) -> size_rpeg c p <= size cs ?= iff (cs == rev (belast c v))by rewrite last_rpeg. Qed. Fixpoint rhanoi3 {n : nat} := if n is n1.+1 return configuration 3 n -> configuration 3 n -> _ _ then fun c1 c2 => let p1 := c1 ldisk in let p2 := c2 ldisk in let c1' := ↓[c1] in let c2' := ↓[c2] in if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 c1' c2'] else let p := `p[p1, p2] in (* one jump *) let m1 := size_rpeg c1' p + size_rpeg c2' p in (* two jumps *) let m2 := size_rpeg c1' p2 + 2 ^ n1 + size_rpeg c2' p1 in if m1 <= m2 then [seq ↑[i]_p1 | i <- rpeg c1' p] ++ [seq ↑[i]_p2 | i <- `c[p] :: lpeg p c2'] else [seq ↑[i]_p1 | i <- rpeg c1' p2] ++ [seq ↑[i]_p | i <- `c[p2] :: ppeg p2 p1] ++ [seq ↑[i]_p2 | i <- `c[p1] :: lpeg p1 c2'] else fun _ _ => [::].n:natc:configuration 3 np:peg 3cs:seq (configuration 3 n)pPcs:path rmove `c[p] cslccsEc:last `c[p] cs = cHHs:symmetric (rrel (n:=3))cPr:path rmove c (rev (belast `c[p] cs))lcrEp:last c (rev (belast `c[p] cs)) = `c[p]u:=rev (belast `c[p] cs):seq (configuration 3 n)v:=rpeg c p:seq (configuration 3 n)Hcs:cs = rev (belast c v)`c[p] = last c vn:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)last c1 cs = c2n:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)last c1 cs = c2n:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)HHr:irreflexive (rrel (n:=3))last c1 cs = c2n:natc1, c2:configuration 3 nHHr:irreflexive (rrel (n:=3))last c1 (rhanoi3 c1 c2) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1last c1 (if c1 ldisk == c2 ldisk then [seq ↑[i]_(c1 ldisk) | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]]) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldisklast c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[p1, p2] + size_rpeg ↓[c2] `p[p1, p2] <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- lpeg `p[p1, p2] ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_(`p[p1, p2]) :: [seq ↑[i]_(`p[p1, p2]) | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1last c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[p1, p2] + size_rpeg ↓[c2] `p[p1, p2] <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p2]] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg `p[p1, p2] ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_(`p[p1, p2]) | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3last c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Ep2:p1 = p2last c1 [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2by rewrite last_cat /= last_cat /= last_map last_lpeg cunliftrK. Qed.HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, last c1 (rhanoi3 c1 c2) = c2c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 ([seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) = c2n:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)path rmove c1 csn:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)path rmove c1 csn:natc1, c2:configuration 3 ncs:=rhanoi3 c1 c2:seq (configuration 3 n)HHr:irreflexive (rrel (n:=3))path rmove c1 csn:natc1, c2:configuration 3 nHHr:irreflexive (rrel (n:=3))path rmove c1 (rhanoi3 c1 c2)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1path rmove c1 (if c1 ldisk == c2 ldisk then [seq ↑[i]_(c1 ldisk) | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskpath rmove c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[p1, p2] + size_rpeg ↓[c2] `p[p1, p2] <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p2]] ++ ↑[`c[`p[p1, p2]]]_p2 :: [seq ↑[i]_p2 | i <- lpeg `p[p1, p2] ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_(`p[p1, p2]) :: [seq ↑[i]_(`p[p1, p2]) | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1path rmove c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[p1, p2] + size_rpeg ↓[c2] `p[p1, p2] <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] `p[p1, p2]] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg `p[p1, p2] ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_(`p[p1, p2]) | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3path rmove c1 (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Ep2:p1 = p2path rmove c1 [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ c3 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ c4 :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] `-->_r c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] `-->_r c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] `-->_r c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] `-->_r c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2↑[`c[p]]_(c1 ldisk) `-->_r c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2[/\ rrel (↑[`c[p]]_(c1 ldisk) ldisk) (c3 ldisk), forall d2 : ordinal_finType n.+1, ldisk != d2 -> ↑[`c[p]]_(c1 ldisk) d2 = c3 d2, on_top ldisk ↑[`c[p]]_(c1 ldisk) & on_top ldisk c3]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel (↑[`c[p]]_(c1 ldisk) ldisk) (c3 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1dmDd:ldisk != d↑[`c[p]]_(c1 ldisk) d = c3 dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel (↑[`c[p]]_(c1 ldisk) ldisk) (c3 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1dmDd:ldisk != d↑[`c[p]]_(c1 ldisk) d = c3 dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1dmDd:ldisk != d↑[`c[p]]_(c1 ldisk) d = c3 dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1dmDd:ldisk != d↑[`c[p]]_(c1 ldisk) d = c3 dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1dmDd:ldisk != dj:'I_1jE:d = j + n`c[c1 ldisk] j = `c[p2] jHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1c1 ldisk = match tsplit d with | inl j => `c[c1 ldisk] j | inr j => `c[p] j end -> ldisk <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1j:'I_nc1 ldisk == `c[p] j -> ldisk <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1j:'I_1jE:d = j + nc1 ldisk = `c[c1 ldisk] j -> ldisk <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1j:'I_1jE:d = j + nc1 ldisk = `c[c1 ldisk] j -> ldisk <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c3HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1p2 = match tsplit d with | inl j => `c[p2] j | inr j => `c[`p[p1, p2]] j end -> n <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d:ordinal_finType n.+1j:'I_np2 == `c[`p[p1, p2]] j -> n <= dHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c3 [seq ↑[i]_p2 | i <- lpeg p ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c1 [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2↑[`c[p2]]_(c1 ldisk) `-->_r c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel (c1 ldisk) `p[p1, p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[c1 ldisk] j | inr j => `c[p2] j end = match tsplit d2 with | inl j => `c[`p[p1, p2]] j | inr j => `c[p2] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel (c1 ldisk) `p[p1, p2]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[c1 ldisk] j | inr j => `c[p2] j end = match tsplit d2 with | inl j => `c[`p[p1, p2]] j | inr j => `c[p2] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[c1 ldisk] j | inr j => `c[p2] j end = match tsplit d2 with | inl j => `c[`p[p1, p2]] j | inr j => `c[p2] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[c1 ldisk] j | inr j => `c[p2] j end = match tsplit d2 with | inl j => `c[`p[p1, p2]] j | inr j => `c[p2] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1j:'I_1d2E:d2 = j + nldisk = d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p2]]_(c1 ldisk)HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1↑[`c[p2]]_(c1 ldisk) ldisk = ↑[`c[p2]]_(c1 ldisk) d2 -> ldisk <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1c1 ldisk = match tsplit d2 with | inl j => `c[c1 ldisk] j | inr j => `c[p2] j end -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1k:'I_nc1 ldisk == `c[p2] k -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c4HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1c4 ldisk = c4 d2 -> ldisk <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1`p[p1, p2] = match tsplit d2 with | inl j => `c[`p[p1, p2]] j | inr j => `c[p2] j end -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1k:'I_n`p[p1, p2] == `c[p2] k -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 ([seq ↑[i]_p | i <- ppeg p2 p1] ++ c5 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]])HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 [seq ↑[i]_p | i <- ppeg p2 p1]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c4 [seq ↑[i]_p | i <- ppeg p2 p1] `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c4 [seq ↑[i]_p | i <- ppeg p2 p1]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c4 [seq ↑[i]_p | i <- ppeg p2 p1] `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2p2 != p1HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c4 [seq ↑[i]_p | i <- ppeg p2 p1] `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c4 [seq ↑[i]_p | i <- ppeg p2 p1] `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2last c4 [seq ↑[i]_p | i <- ppeg p2 p1] `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2↑[`c[p1]]_p `-->_r c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel p p2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[p] j | inr j => `c[p1] j end = match tsplit d2 with | inl j => `c[p2] j | inr j => `c[p1] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2rrel p p2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[p] j | inr j => `c[p1] j end = match tsplit d2 with | inl j => `c[p2] j | inr j => `c[p1] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[p] j | inr j => `c[p1] j end = match tsplit d2 with | inl j => `c[p2] j | inr j => `c[p1] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1ldisk != d2 -> match tsplit d2 with | inl j => `c[p] j | inr j => `c[p1] j end = match tsplit d2 with | inl j => `c[p2] j | inr j => `c[p1] j endHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1j:'I_1d2E:d2 = j + nldisk = d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk ↑[`c[p1]]_pHHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1↑[`c[p1]]_p ldisk = ↑[`c[p1]]_p d2 -> ldisk <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1p = match tsplit d2 with | inl j => `c[p] j | inr j => `c[p1] j end -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1k:'I_np == `c[p1] k -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2on_top ldisk c5HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1c5 ldisk = c5 d2 -> ldisk <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1p2 = match tsplit d2 with | inl j => `c[p2] j | inr j => `c[p1] j end -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2d2:ordinal_finType n.+1k:'I_np2 == `c[p1] k -> n <= d2HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]by rewrite path_liftr // path_lpeg. Qed.HHr:irreflexive (rrel (n:=3))n:natIH:forall c1 c2 : configuration 3 n, path rmove c1 (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskc3:=↑[`c[`p[p1, p2]]]_p2:configuration 3 n.+1c4:=↑[`c[p2]]_(`p[p1, p2]):configuration 3 n.+1c5:=↑[`c[p1]]_p2:configuration 3 n.+1p:=`p[p1, p2]:peg 3p1Dp2:p1 != p2path rmove c5 [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]n:natc1, c2:configuration 3 ncs:seq (configuration 3 n)path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csn:natc1, c2:configuration 3 ncs:seq (configuration 3 n)path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csn:natc1, c2:configuration 3 ncs:seq (configuration 3 n)HHr:irreflexive (rrel (n:=3))path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csn:natc1, c2:configuration 3 ncs:seq (configuration 3 n)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)path rmove c1 cs -> last c1 cs = c2 -> size (if c1 ldisk == c2 ldisk then [seq ↑[i]_(c1 ldisk) | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskpath rmove c1 cs -> last c1 cs = c2 -> size (if p1 == p2 then [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Ep2:p1 = p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2size [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2size (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Ep2:p1 = p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2lcsmEc1m:last c1 cs ldisk = p1size [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2size (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Ep2:p1 = p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2lcsmEc1m:last c1 cs ldisk = p1cs1:seq (configuration 3 n)c1Pcs1:path (move (rrel (n:=3))) ↓[c1] cs1lc1csElcs1:last ↓[c1] cs1 = ↓[last c1 cs]size [seq ↑[i]_p1 | i <- rhanoi3 ↓[c1] ↓[c2]] <= size cs1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2size (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2size (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1 then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natsize (if u <= v then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size cs -> size (if u <= v then [seq ↑[i]_p1 | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p ↓[c2]] else [seq ↑[i]_p1 | i <- rpeg ↓[c1] p2] ++ ↑[`c[p2]]_p :: [seq ↑[i]_p | i <- ppeg p2 p1] ++ ↑[`c[p1]]_p2 :: [seq ↑[i]_p2 | i <- lpeg p1 ↓[c2]]) <= size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natH1:u <= vLscs:u < size csu < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natH1:v < uLscs:v < size cs(size_rpeg ↓[c1] p2 + (size (ppeg p2 p1) + size_rpeg ↓[c2] p1)).+1 < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natH1:v < uLscs:v < size cs(size_rpeg ↓[c1] p2 + (size (ppeg p2 p1) + size_rpeg ↓[c2] p1)).+1 < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natH1:v < usize_rpeg ↓[c1] p2 + (size (ppeg p2 p1) + size_rpeg ↓[c2] p1) < vHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natH1:v < usize (ppeg p2 p1) < 2 ^ nHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1cs:seq (configuration 3 n.+1)p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskminn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1c1Pcs:path rmove c1 cslc1csEc2:last c1 cs = c2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)csE:cs = [seq ↑[i]_(c1 ldisk) | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldisku:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)csE:cs = [seq ↑[i]_(c1 ldisk) | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'p1 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldisku:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)csE:cs = [seq ↑[i]_(c1 ldisk) | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'f (last c1 cs) = f c2 -> p1 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldisku:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2c1':=↓[c1]:configuration 3 ncs':=[seq ↓[i] | i <- cs]:seq (configuration 3 n)csE:cs = [seq ↑[i]_(c1 ldisk) | i <- cs']c1'Pcs':path (move (rrel (n:=3))) c1' cs'↑[last ↓[c1] cs']_(c1 ldisk) ldisk = c2 ldisk -> p1 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)Lcs:size cs < m.+1lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1minn u v < size csHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)lc1csEc2:last c1 cs = c2cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4 = pHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p3 != pHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)pp4Pcs2':path (move (rrel (n:=3))) ↓[c3] cs2'pp4cs2'E:last ↓[c3] cs2' = ↓[last c3 cs2]scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]minn u v <= size cs1 + size cs2'HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]u <= size cs1 + size cs2'HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]size_rpeg ↓[c1] p <= size cs1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]size_rpeg ↓[c2] p <= size cs2'HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]last ↓[c1] cs1 = `c[p]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]size_rpeg ↓[c2] p <= size cs2'HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]size_rpeg ↓[c2] p <= size cs2'HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Ep2:p3 = p2p4Ep:p4 = pcs2':seq (configuration 3 n)scs2'Lscs2:size cs2' <= size cs2 ?= iff (cs2 == [seq ↑[i]_ (c3 ldisk) | i <- cs2'])pp4Pcs2':path (move (rrel (n:=3))) `c[p4] cs2'pp4cs2'E:last `c[p4] cs2' = ↓[last c3 cs2]last `c[p4] cs2' = ↓[c2]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3 = pHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4 == p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = p(p1 != p2) && ~~ ((p1 != p2) && (p2 != p2))HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp1 != `p[p1, p2]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp1 != `p[p1, p2]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1c3Pcs2:path (move (rrel (n:=3))) c3 cs2p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2c3':=↓[c3]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)p5:=c3 ldisk:peg 3cs2E:cs2 = [seq ↑[i]_p5 | i <- cs2']c3'Pcs2':path (move (rrel (n:=3))) c3' cs2'minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2c3':=↓[c3]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)p5:=c3 ldisk:peg 3cs2E:cs2 = [seq ↑[i]_p5 | i <- cs2']c3'Pcs2':path (move (rrel (n:=3))) c3' cs2'f (last c3 cs2) = f c2 -> minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2c3':=↓[c3]:configuration 3 ncs2':=[seq ↓[i] | i <- cs2]:seq (configuration 3 n)p5:=c3 ldisk:peg 3cs2E:cs2 = [seq ↑[i]_p5 | i <- cs2']c3'Pcs2':path (move (rrel (n:=3))) c3' cs2'p3Ep2:p3 = p2minn u v < (size cs1 + size [seq ↑[i]_p5 | i <- cs2']).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4minn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1Lcs:size cs1 + size cs2 < mlc3cs2Ec2:last c3 cs2 = c2p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = pminn u v < (size cs1 + size cs2).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mminn u v < (size cs1 + (size cs3 + (size cs4).+1)).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mminn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7 == p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2minn u v <= size ([seq ↑[i]_p1 | i <- cs1] ++ cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) < mHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2path rmove c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) < mHHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2path rmove c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2path rmove c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2path rmove c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2path (move (rrel (n:=3))) ↓[c1] cs1 && path rmove (last c1 [seq ↑[i]_p1 | i <- cs1]) cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2true && path rmove (last c1 [seq ↑[i]_p1 | i <- cs1]) cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last c1 ([seq ↑[i]_p1 | i <- cs1] ++ cs4) = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2last ↑[last ↓[c1] cs1]_(c1 ldisk) cs4 = c2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Ep1:p6 = p1p7Ep2:p7 = p2size ([seq ↑[i]_p1 | i <- cs1] ++ cs4) <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Dp2:p6 != p2p6 = p2HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Dp2:p6 != p2p5 == p6HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7 = p1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7 == p1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1minn u v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1v <= size cs1 + ((size cs3).+1 + size cs4)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c1] p2 <= size cs1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p12 ^ n + size_rpeg ↓[c2] p1 <= (size cs3).+1 + size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1last ↓[c1] cs1 = `c[p2]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p12 ^ n + size_rpeg ↓[c2] p1 <= (size cs3).+1 + size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p12 ^ n + size_rpeg ↓[c2] p1 <= (size cs3).+1 + size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p12 ^ n <= (size cs3).+1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1(2 ^ n).-1 <= size cs3HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c3] p1 = (2 ^ n).-1HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c3] p1 <= size cs3HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c3] p1 <= size cs3HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1last ↓[c3] cs3 = `c[p1]HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1cs4':seq (configuration 3 n)c4'Pcs4':path (move (rrel (n:=3))) ↓[c4] cs4'lc4'cs4'Elc4cs4:last ↓[c4] cs4' = ↓[last c4 cs4]Lcs4':size cs4' <= size cs4size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1cs4':seq (configuration 3 n)lc4'cs4'Elc4cs4:last ↓[c4] cs4' = ↓[last c4 cs4]Lcs4':size cs4' <= size cs4c4'Pcs4':path (move (rrel (n:=3))) `c[p1] cs4'size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1cs4':seq (configuration 3 n)Lcs4':size cs4' <= size cs4c4'Pcs4':path (move (rrel (n:=3))) `c[p1] cs4'lc4'cs4'Elc4cs4:last `c[p1] cs4' = ↓[last c4 cs4]size_rpeg ↓[c2] p1 <= size cs4HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1cs4':seq (configuration 3 n)c4'Pcs4':path (move (rrel (n:=3))) `c[p1] cs4'lc4'cs4'Elc4cs4:last `c[p1] cs4' = ↓[last c4 cs4]size_rpeg ↓[c2] p1 <= size cs4'by rewrite lc4'cs4'Elc4cs4 lc6cs4Ec2. Qed. Fixpoint size_rhanoi3 {n : nat} : _ _ n -> _ _ n -> nat := if n is n1.+1 then fun c1 c2 : configuration 3 n1.+1 => let p1 := c1 ldisk in let p2 := c2 ldisk in let c1' := ↓[c1] in let c2' := ↓[c2] in if p1 == p2 then size_rhanoi3 c1' c2' else (* one jump *) let p := `p[p1, p2] in let m1 := size_rpeg c1' p + size_rpeg c2' p in (* two jumps *) let m2 := size_rpeg c1' p2 + 2 ^ n1 + size_rpeg c2' p1 in (minn m1 m2).+1 else fun _ _ => 0. (* size computes the size *)HHr:irreflexive (rrel (n:=3))HHs:symmetric (rrel (n:=3))n:natIH:forall (c1 c2 : configuration 3 n) (cs : seq (configuration 3 n)), path rmove c1 cs -> last c1 cs = c2 -> size (rhanoi3 c1 c2) <= size csc1, c2:configuration 3 n.+1p:=`p[c1 ldisk, c2 ldisk]:peg 3p1:=c1 ldisk:(fun=> peg 3) ldiskp2:=c2 ldisk:(fun=> peg 3) ldiskp1Dp2:p1 != p2u:=size_rpeg ↓[c1] p + size_rpeg ↓[c2] p:natv:=size_rpeg ↓[c1] p2 + 2 ^ n + size_rpeg ↓[c2] p1:natf:=fun_of_fin^~ ldisk:configuration 3 n.+1 -> (fun=> peg 3) ldiskm:natIH1:forall cs : seq (configuration 3 n.+1), size cs < m -> path rmove c1 cs -> last c1 cs = c2 -> minn u v < size cscs:seq (configuration 3 n.+1)cs1:seq (configuration 3 n)cs2:seq (configuration 3 n.+1)p1':=c1 ldisk:peg 3p3:peg 3p4:=`p[p1', p3]:peg 3c1':=↓[c1]:configuration 3 nc3:=↑[`c[p4]]_p3:configuration 3 n.+1p1Dp3:p1' != p3p1Rp3:rrel p1' p3lc1'cs1Epp4:last c1' cs1 = `c[p4]csE:cs = [seq ↑[i]_p1' | i <- cs1] ++ c3 :: cs2c1'Pcs1:path (move (rrel (n:=3))) c1' cs1p1'Ep1:p1' = p1p3Dp2:p3 != p2p3Ep:p3 = pp4Ep2:p4 = p2cs3:seq (configuration 3 n)cs4:seq (configuration 3 n.+1)p5:=c3 ldisk:peg 3p6:peg 3p7:=`p[p5, p6]:peg 3c3':=↓[c3]:configuration 3 nc4:=↑[`c[p7]]_p6:configuration 3 n.+1p5Dp6:p5 != p6p5p6:rrel p5 p6c3'cs3Epp7:last c3' cs3 = `c[p7]cs2E:cs2 = [seq ↑[i]_p5 | i <- cs3] ++ c4 :: cs4c3'Pcs3:path (move (rrel (n:=3))) c3' cs3c4Pcs4:path (move (rrel (n:=3))) c4 cs4p5Ep:p5 = plc6cs4Ec2:last c4 cs4 = c2Lcs:size cs1 + (size cs3 + (size cs4).+1) < mp6Dp1:p6 != p1p6Ep2:p6 = p2p7Ep1:p7 = p1cs4':seq (configuration 3 n)c4'Pcs4':path (move (rrel (n:=3))) `c[p1] cs4'lc4'cs4'Elc4cs4:last `c[p1] cs4' = ↓[last c4 cs4]last `c[p1] cs4' = ↓[c2]n:natc1, c2:configuration 3 nsize_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)n:natc1, c2:configuration 3 nsize_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1(if c1 ldisk == c2 ldisk then size_rhanoi3 ↓[c1] ↓[c2] else (minn (size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk]) (size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk))).+1) = size (if c1 ldisk == c2 ldisk then [seq ↑[i]_(c1 ldisk) | i <- rhanoi3 ↓[c1] ↓[c2]] else if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1E:c1 ldisk = c2 ldisksize_rhanoi3 ↓[c1] ↓[c2] = size [seq ↑[i]_(c1 ldisk) | i <- rhanoi3 ↓[c1] ↓[c2]]n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldisk(minn (size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk]) (size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk))).+1 = size (if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldisk(minn (size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk]) (size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk))).+1 = size (if size_rpeg ↓[c1] `p[c1 ldisk, c2 ldisk] + size_rpeg ↓[c2] `p[c1 ldisk, c2 ldisk] <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] `p[c1 ldisk, c2 ldisk]] ++ ↑[`c[`p[c1 ldisk, c2 ldisk]]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg `p[c1 ldisk, c2 ldisk] ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_(`p[c1 ldisk, c2 ldisk]) :: [seq ↑[i]_(`p[c1 ldisk, c2 ldisk]) | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3(minn (size_rpeg ↓[c1] p + size_rpeg ↓[c2] p) (size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk))).+1 = size (if size_rpeg ↓[c1] p + size_rpeg ↓[c2] p <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg p ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_p :: [seq ↑[i]_p | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:nat(minn (x + y) (size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk))).+1 = size (if x + y <= size_rpeg ↓[c1] (c2 ldisk) + 2 ^ n + size_rpeg ↓[c2] (c1 ldisk) then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg p ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_p :: [seq ↑[i]_p | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = size (if x + y <= z + 2 ^ n + t then [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg p ↓[c2]] else [seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_p :: [seq ↑[i]_p | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]])n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then size ([seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] p] ++ ↑[`c[p]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg p ↓[c2]]) else size ([seq ↑[i]_(c1 ldisk) | i <- rpeg ↓[c1] (c2 ldisk)] ++ ↑[`c[c2 ldisk]]_p :: [seq ↑[i]_p | i <- ppeg (c2 ldisk) (c1 ldisk)] ++ ↑[`c[c1 ldisk]]_(c2 ldisk) :: [seq ↑[i]_(c2 ldisk) | i <- lpeg (c1 ldisk) ↓[c2]]))n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then size (rpeg ↓[c1] p) + (size (lpeg p ↓[c2])).+1 else size (rpeg ↓[c1] (c2 ldisk)) + (size (ppeg (c2 ldisk) (c1 ldisk)) + (size (lpeg (c1 ldisk) ↓[c2])).+1).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then size_rpeg ↓[c1] p + (size_rpeg ↓[c2] p).+1 else size_rpeg ↓[c1] (c2 ldisk) + (size (ppeg (c2 ldisk) (c1 ldisk)) + (size_rpeg ↓[c2] (c1 ldisk)).+1).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then x + y.+1 else z + (size (ppeg (c2 ldisk) (c1 ldisk)) + t.+1).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then x + y.+1 else z + (2 ^ n + t).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(minn (x + y) (z + 2 ^ n + t)).+1 = (if x + y <= z + 2 ^ n + t then (x + y).+1 else (z + (2 ^ n + t)).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):nat(if x + y < z + 2 ^ n + t then x + y else z + 2 ^ n + t).+1 = (if x + y <= z + 2 ^ n + t then (x + y).+1 else (z + 2 ^ n + t).+1)n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):natLL1:z + 2 ^ n + t <= x + yLL2:x + y <= z + 2 ^ n + t(z + 2 ^ n + t).+1 = (x + y).+1n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):natLL1:x + y < z + 2 ^ n + tLL2:z + 2 ^ n + t < x + y(x + y).+1 = (z + 2 ^ n + t).+1by congr (_.+1); apply/eqP; rewrite eqn_leq ltnW // ltnW. Qed.n:natIH:forall c1 c2 : configuration 3 n, size_rhanoi3 c1 c2 = size (rhanoi3 c1 c2)c1, c2:configuration 3 n.+1NE:c1 ldisk != c2 ldiskp:=`p[c1 ldisk, c2 ldisk]:peg 3x:=size_rpeg ↓[c1] p:naty:=size_rpeg ↓[c2] p:natz:=size_rpeg ↓[c1] (c2 ldisk):natt:=size_rpeg ↓[c2] (c1 ldisk):natLL1:x + y < z + 2 ^ n + tLL2:z + 2 ^ n + t < x + y(x + y).+1 = (z + 2 ^ n + t).+1n:natc1, c2:configuration 3 n`d[c1, c2]_rmove = size_rhanoi3 c1 c2n:natc1, c2:configuration 3 n`d[c1, c2]_rmove = size_rhanoi3 c1 c2n:natc1, c2:configuration 3 n`d[c1, c2]_rmove <= size_rhanoi3 c1 c2 <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 npath rmove c1 (rhanoi3 c1 c2)n:natc1, c2:configuration 3 nlast c1 (rhanoi3 c1 c2) = c2n:natc1, c2:configuration 3 nsize (rhanoi3 c1 c2) <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 npath rmove c1 (rhanoi3 c1 c2)n:natc1, c2:configuration 3 nlast c1 (rhanoi3 c1 c2) = c2n:natc1, c2:configuration 3 nsize (rhanoi3 c1 c2) <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 nlast c1 (rhanoi3 c1 c2) = c2n:natc1, c2:configuration 3 nsize (rhanoi3 c1 c2) <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 nlast c1 (rhanoi3 c1 c2) = c2n:natc1, c2:configuration 3 nsize (rhanoi3 c1 c2) <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 nsize (rhanoi3 c1 c2) <= `d[c1, c2]_rmoven:natc1, c2:configuration 3 np1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 c2 p1size (rhanoi3 c1 c2) <= `d[c1, c2]_rmoveby apply: gpath_last p1H. Qed. End Hanoi3.n:natc1, c2:configuration 3 np1:seq (finfun_finType (ordinal_finType n) (ordinal_finType 3))p1H:gpath rmove c1 c2 p1last c1 p1 = c2